﻿package fr.babos.core.data.remote 
{
	import flash.events.IEventDispatcher;
	import fr.babos.core.data.parse.IDataParser;
	
	/**
	 * @author ZoulouX
	 */
	public interface IDataRemote extends IEventDispatcher
	{
		/**
		 * Le parser
		 */
		function get parser ():IDataParser
		function set parser (value:IDataParser):void
		
		/**
		 * Parser automatiquement
		 */
		function get autoParse ():Boolean
		function set autoParse (value:Boolean):void
		
		/**
		 * Récupérer la liste des appels
		 */
		function get calls ():Array
		
		/**
		 * Récupérer le nombre de calls en cours d'exécution
		 */
		function get totalCalls ():uint
		
		/**
		 * Récupérer le dernier id d'appel
		 */
		function get callId ():uint
		
		/**
		 * Récupérer le dernier appel
		 */
		function get lastCall ():RemotingCall
		
		/**
		 * Vider les calls terminés automatiquement, directement après les envois d'event
		 */
		function get autoGarbageCalls ():Boolean
		function set autoGarbageCalls (value:Boolean):void 
		
		/**
		 * Activer le mode queue.
		 * Ce mode permet d'éviter qu'il y ai plusieurs appels en cours sur une même remote.
		 * Si un appel B est effectué alors qu'un appel A est en cours, l'appel A sera exécuté qu'une fois l'appel B terminé (success ou error)
		 */
		function get queueMode ():Boolean
		function set queueMode (value:Boolean):void 
		
		/**
		 * La méthode call, à concrêtiser en overridant.
		 * @param pCommand : Le nom de la commande à exécuter
		 * @param pOptions : Les options de l'appel
		 * @param ... rest : Les paramètres non nommés optionnels.
		 * @return : L'objet call contenant son id et sa commande.
		 */
		function call (pCommand:String, pOptions:Object = null, ... rest):RemotingCall
		
		/**
		 * Vider la liste des call qui sont terminés
		 */
		function garbageCalls ():void
		
		/**
		 * Arrêter tous les appels
		 */
		function cancelQueue ():void
		
		/**
		 * Effectuer l'appel suivant
		 */
		function callNext ():void
	}
}